import store from '@/store'
import { getToken } from '@/utils/auth'

// 不需要进行商家认证检查的白名单路径
const authExemptList = ['/login', '/register', '/auth', '/step-two', '/step-three', '/step-four', '/step-five', '/ren']

// 检查路径是否在商家认证豁免列表中
export const isAuthExempt = (path) => {
  return authExemptList.some(pattern => isPathMatch(pattern, path))
}

// 用于简单路径匹配的辅助函数
export const isPathMatch = (pattern, path) => {
  if (pattern === path) {
    return true
  }
  // 处理通配符等更复杂的情况
  if (pattern.endsWith('*')) {
    const prefix = pattern.slice(0, -1)
    return path.startsWith(prefix)
  }
  return false
}

// 需要进行商家认证的角色列表
const requiredRoles = [
  'common',     // 普通用户
  'supplier-noAudited', // 未认证供应商
  'purchaser-noAudited', // 未认证采购商
]

// 获取当前用户的角色
export const getCurrentUserRoles = async () => {
  // 如果角色为空，且用户已登录，尝试获取用户信息
  if ((!store.getters.roles || store.getters.roles.length === 0) && getToken()) {
    try {
      console.log('尝试获取用户信息...')
      await store.dispatch('GetInfo')
      console.log('获取用户信息成功')
    } catch (error) {
      console.error('获取用户信息失败:', error)
    }
  }
  
  const roles = store.getters.roles || []
  console.log('当前获取到的角色:', roles)
  return roles
}

// 检查用户是否需要跳转到商家认证页面
export const needToRedirect = (roles) => {
  if (!roles || !Array.isArray(roles)) {
    console.error('角色参数不是有效数组:', roles)
    return false
  }
  
  // 检查用户是否拥有任一需要认证的角色
  const needRedirect = roles.some(role => requiredRoles.includes(role))
  
  // 打印调试信息
  console.log('用户角色:', roles)
  console.log('需要认证的角色:', requiredRoles)
  console.log('是否需要跳转到认证页面:', needRedirect)
  
  return needRedirect
}

// 检查当前路径是否需要重定向到商家认证页面
export const shouldRedirectToAuth = async (currentPath) => {
  console.log('检查路径是否需要重定向:', currentPath)
  
  if (isAuthExempt(currentPath)) {
    console.log('路径在豁免列表中，不需要重定向')
    return false
  }
  
  const roles = await getCurrentUserRoles()
  const needRedirect = needToRedirect(roles)
  
  console.log('是否需要重定向:', needRedirect)
  return needRedirect
}

export default {
  needToRedirect,
  isAuthExempt,
  getCurrentUserRoles,
  shouldRedirectToAuth
} 